﻿using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Telecom.Service;
using TelecomGis.Helper.Control;
using Telecom.Data;
using TelecomGis.Helper.Helper;
using System.Threading; 

namespace TelecomGis.Controllers
{
    public class Dm_ThietBiController : ContronllerBase
    {
        private readonly mangVTSer _mangVTSer = new mangVTSer();
        private readonly loaiTBSer _loaiTBSer = new loaiTBSer();
        private readonly thietBiSer _thietBiSer = new thietBiSer();
        private readonly hangSXSer _hangSXSer = new hangSXSer();
        private readonly cardSer _cardSer = new cardSer();
        private readonly loaiPortSer _loaiPortSer = new loaiPortSer();

        //
        // GET: /Dm_ThietBi/

        public ActionResult DM_THIETBI()
        {
            return PartialView();
        }

        public ActionResult Get_DM_TB_ById(decimal Id)
        {
            var _listEntity = _thietBiSer.GetById_Json(Id);
            var jsonResult = Json(_listEntity, JsonRequestBehavior.AllowGet);
            jsonResult.MaxJsonLength = int.MaxValue;
            return jsonResult;
        }

        public ActionResult Get_LOAI_TB_ById(decimal Id)
        {
            var _listEntity = _loaiTBSer.getByMa(Id);
            var jsonResult = Json(_listEntity, JsonRequestBehavior.AllowGet);
            jsonResult.MaxJsonLength = int.MaxValue;
            return jsonResult;
        }

        public string listJsonIntoCateTree()
        {
            var _listEntity = _loaiTBSer.getListTree();

            return JsonConvert.SerializeObject(_listEntity, Formatting.Indented,
                              new JsonSerializerSettings
                              {
                                  ReferenceLoopHandling = ReferenceLoopHandling.Ignore
                              });
        }

        public string ListThietByLoai(string MaLoai)
        {

            var entiyArryId = _loaiTBSer.getALLMangVT(MaLoai).Select(p => p.MA).ToArray();

            var _listEntity = _thietBiSer.ListThietBiByLoaiTBArray(entiyArryId);

            return JsonConvert.SerializeObject(_listEntity, Formatting.Indented,
                              new JsonSerializerSettings
                              {
                                  ReferenceLoopHandling = ReferenceLoopHandling.Ignore
                              });
        }

        public string ListThietBiInJson()
        {
            var _listEntity = _thietBiSer.ListThietBiInJson();

            return JsonConvert.SerializeObject(_listEntity, Formatting.Indented,
                              new JsonSerializerSettings
                              {
                                  ReferenceLoopHandling = ReferenceLoopHandling.Ignore
                              });
        }

        public string ListThietBiInJsonByMVT(string maVt)
        {
            var _listEntity = _thietBiSer.ListThietBiInJsonByMVT(maVt);

            return JsonConvert.SerializeObject(_listEntity, Formatting.Indented,
                              new JsonSerializerSettings
                              {
                                  ReferenceLoopHandling = ReferenceLoopHandling.Ignore
                              });
        }


        public string ListJsonLoaiPort()
        {
            var _listEntity = _loaiPortSer.getList();

            return JsonConvert.SerializeObject(_listEntity, Formatting.Indented,
                              new JsonSerializerSettings
                              {
                                  ReferenceLoopHandling = ReferenceLoopHandling.Ignore
                              });
        }

        // json Data
        public string ListMangVT()
        {
            var _listEntity = _mangVTSer._getList();
            //var jsonResult = Json(_listEntity, JsonRequestBehavior.AllowGet);
            //jsonResult.MaxJsonLength = int.MaxValue;
            //return jsonResult;
            return JsonConvert.SerializeObject(_listEntity, Formatting.Indented,
                              new JsonSerializerSettings
                              {
                                  ReferenceLoopHandling = ReferenceLoopHandling.Ignore
                              });
        }

        public string ListLoaiTb(string ma)
        {
            var _listEntity = _loaiTBSer.getList(ma);
            //var jsonResult = Json(_listEntity, JsonRequestBehavior.AllowGet);
            //jsonResult.MaxJsonLength = int.MaxValue;
            //return jsonResult;
            return JsonConvert.SerializeObject(_listEntity, Formatting.Indented,
                             new JsonSerializerSettings
                             {
                                 ReferenceLoopHandling = ReferenceLoopHandling.Ignore
                             });
        }

        public string ListHangSX()
        {
            var _listEntity = _hangSXSer.getList();
            //var jsonResult = Json(_listEntity, JsonRequestBehavior.AllowGet);
            //jsonResult.MaxJsonLength = int.MaxValue;
            //return jsonResult;
            return JsonConvert.SerializeObject(_listEntity, Formatting.Indented,
                             new JsonSerializerSettings
                             {
                                 ReferenceLoopHandling = ReferenceLoopHandling.Ignore
                             });
        }


        public ActionResult loadDataLTBInJson(string idObject, string type, int jtStartIndex = 0, int jtPageSize = 0, string jtSorting = null)
        {
            var _listEntity = _thietBiSer.getListJsonIntoJtable(idObject,type);
            return Json(new { Result = "OK", Records = _listEntity, TotalRecordCount = _listEntity.Count }, JsonRequestBehavior.AllowGet);
        }

        public ActionResult ListDataCardInJson(int idTb, int jtStartIndex = 0, int jtPageSize = 0, string jtSorting = null)
        {
            var _listEntity = _cardSer._getList(idTb);
            return Json(new { Result = "OK", Records = _listEntity, TotalRecordCount = _listEntity.Count }, JsonRequestBehavior.AllowGet);
        }


        public ActionResult AddTb(string mvt, string ltb)
        {
            DM_THIETBI model = new DM_THIETBI();
            model.LOAITB = decimal.Parse(ltb);
            ViewBag.MVTADDTB = mvt;
            model.ID = 0;

            return PartialView("_AddTb", model);

        }

        [HttpPost]
        public ActionResult AdUpTB(DM_THIETBI model)
        {
            if (model.LOAITB == 0)
            {
                return JsonError("Vui lòng chọn mạng viễn thông và loại thiết bị");
            }

            if (string.IsNullOrEmpty(model.MA))
            {
                return JsonError("Vui lòng nhập mã thiết bị");
            }

            if (string.IsNullOrEmpty(model.MA))
            {
                return JsonError("Vui lòng nhập mã thiết bị");
            }

            var entityTB = _thietBiSer.GetByMa(model.MA.ToUpper());
            if (entityTB != null)
            {
                return JsonError("Mã thiết bị đã tồn tại. Vui lòng nhập mã khác");
            }

            if (string.IsNullOrEmpty(model.TEN))
            {
                return JsonError("Vui lòng nhập tên thiết bị");
            }

            if (string.IsNullOrEmpty(model.HANGSX))
            {
                return JsonError("Vui lòng chọn hãng sản xuất của thiết bị");
            }

            _thietBiSer.AddUpDate(model);

            return JsonSuccess("");

        }

        [HttpPost]
        public ActionResult UpDateTB(DM_THIETBI model)
        {
            if (model.LOAITB == 0)
            {
                return JsonError("Vui lòng chọn mạng viễn thông và loại thiết bị");
            }

            if (string.IsNullOrEmpty(model.MA))
            {
                return JsonError("Vui lòng nhập mã thiết bị");
            }

            if (string.IsNullOrEmpty(model.MA))
            {
                return JsonError("Vui lòng nhập mã thiết bị");
            }

            string MaOld = Request["MaTBOld_UpDate"];
            if (MaOld != model.MA)
            {
                var entityTB = _thietBiSer.GetByMa(model.MA.ToUpper());
                if (entityTB != null)
                {
                    return JsonError("Mã thiết bị đã tồn tại. Vui lòng nhập mã khác");
                }
            }

            if (string.IsNullOrEmpty(model.TEN))
            {
                return JsonError("Vui lòng nhập tên thiết bị");
            }

            if (string.IsNullOrEmpty(model.HANGSX))
            {
                return JsonError("Vui lòng chọn hãng sản xuất của thiết bị");
            }

            _thietBiSer.AddUpDate(model);

            return JsonSuccess("");

        }

        public ActionResult DeleteTB(decimal id)
        {
            try
            {
                var entityTb = _thietBiSer.GetById(id);

                if (!string.IsNullOrEmpty(entityTb.HINHANH))
                {
                    string basePath = "~/Content/fileUpload";
                    FileHelper fileHelper = new FileHelper(basePath);
                    fileHelper.DeleteFile(entityTb.HINHANH);

                }
                _thietBiSer.DeleteTB(id);
                return Json("SUCCESS", JsonRequestBehavior.AllowGet);
            }
            catch (Exception e)
            {
                return Json("ERROR_CODE", JsonRequestBehavior.AllowGet);
            }
        }

        public ActionResult UpdateTb(decimal Id)
        {

            DM_THIETBI model = _thietBiSer.GetById(Id);

            ViewBag.MVTUPTB = _loaiTBSer.getByMa(model.LOAITB.Value).MANGVT;

            return PartialView("_UpdateTb", model);

        }

        public ActionResult AddCardTb(int Id)
        {
            var models = new CARD();
            models.ID = 0;
            models.DMTHIETBI = Id;
            return PartialView("_AddCardTb", models);

        }

        public ActionResult AdUpCard(CARD model)
        {
            if (string.IsNullOrEmpty(model.TEN))
            {
                return JsonError("Vui lòng nhập tên Card");

            }
            if (string.IsNullOrEmpty(model.LOAIPORT))
            {
                return JsonError("Vui lòng chọn loại Port");

            }

            try
            {
                int _soPort = int.Parse(model.SOPORT.ToString());
                if (_soPort == 0)
                {
                    return JsonError("Vui lòng nhập số port phải lớn hơn 0");
                }
            }
            catch (Exception e)
            {
                return JsonError(" Vui lòng nhập số port và giá trị nhập vào phải là số");
            }

            model.ID = 0;
            _cardSer.AddUpDate(model);
            return JsonSuccess("");
            
        }

        public ActionResult UpdateCardTb(int Id)
        {
            var model = _cardSer.GetById(Id);
            return PartialView("_UpdateCardTb", model);
        }

        [HttpPost]
        public JsonResult DeleteCard(int ID)
        {
            try
            {
                Thread.Sleep(50);
                _cardSer.DeleteCard(ID);
                return Json(new { Result = "OK" });
            }
            catch (Exception ex)
            {
                return Json(new { Result = "ERROR", Message = ex.Message });
            }
        }

    }
}
